package ni.org.ics.estudios.cohorte.muestreoanual.movilcontroller;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;



import ni.org.ics.estudios.cohorte.muestreoanual.domain.VisitaTerreno;
import ni.org.ics.estudios.cohorte.muestreoanual.domain.VisitaTerrenoId;
import ni.org.ics.estudios.cohorte.muestreoanual.service.VisitaTerrenoService;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Maneja las solicitudes que van a la aplicacion relacionadas a json
 * 
 * @author Brenda Lopez
 */
@Controller
@RequestMapping("/movil/*")
public class VisitaTerrenoController {
	@Resource(name="visitaTerrenoService")
	private VisitaTerrenoService visitaTerrenoService;
	private static final Logger logger = LoggerFactory.getLogger(VisitaTerrenoController.class);

	/**
     * Retorna muestras. Acepta una solicitud GET para JSON
     * @return muestras JSON
     */
    @RequestMapping(value = "visitas", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody List<VisitaTerreno> descargarVisitaTerreno() {
        logger.info("Descargando toda la informacion de los datos de las VisitaTerreno");
        List<VisitaTerreno> visitas = visitaTerrenoService.getVisitaTerrenos();
        if (visitas == null){
        	logger.debug("Nulo");
        }
        return visitas;	
    }
    
    
    
    /**
     * Acepta una solicitud POST con un parametro JSON
     * @param muestra Objeto serializado de Muestras
     * @return una cadena con el resultado*/
     
    @RequestMapping(value = "visitas", method = RequestMethod.POST, consumes = "application/json")
    public @ResponseBody String sendMessageJson(@RequestBody VisitaTerreno[] envio) {
        logger.debug("Insertando/Actualizando VisitaTerreno");
        if (envio == null){
        	logger.debug("Nulo");
        	return "No recibi nada!";
        }
        else{
        	List<VisitaTerreno> visitas = Arrays.asList(envio);
        	for (VisitaTerreno visita : visitas){
        		VisitaTerrenoId vtId = new VisitaTerrenoId();
        		vtId.setCodigo(visita.getVisitaId().getCodigo());
        		vtId.setFechaVisita(new Date(visita.getVisitaId().getFechaVisita().getTime()));
        		Boolean existe = visitaTerrenoService.checkMuestra(vtId);
        		if (!existe){
        			visitaTerrenoService.addVisitaTerreno(visita);
        		}
        		else{
        			visitaTerrenoService.updateVisitaTerreno(visita);
        		}
        	}
        }
        return "Datos recibidos!";
    }  
    
    
}
